// Description  :
// Author       : MMingzhao
// Date         : 2020-01-15 17:02

// Package model
package model

import (
	"github.com/jinzhu/gorm"
	"go-admin-template/tools"
	"reflect"
	"time"
)

// User 登陆用户的账号信息
type User struct {
	ID          string    `gorm:"primary_key"`  // 主键id
	CreatedTime time.Time `json:"created_time"` // 创建时间
	DeleteFlag  int       `json:"-"`            // 软删除 0: not deleted; 1: deleted
	UpdatedTime time.Time `json:"-"`            // 最近修改时间

	Username string `json:"username"` // 用户名称
	Mobile   string `json:"mobile"`   // 用户手机
	Email    string `json:"email"`    // 用户邮箱
	Salt     string `json:"-"`        // 加密盐值
	Password string `json:"-"`        // 用户密码
	Lock     int    `json:"lock"`     // 账号是否被锁定; 0: unlock; 1: lock

	AccessIp   string    `json:"access_ip"`   // 最近一次登陆ip
	AccessTime time.Time `json:"access_time"` // 最近一次登陆时间

}

//IsEmpty struct判空函数 为空: true; 不为空: false
func (user *User) IsEmpty() bool {
	return reflect.DeepEqual(user, User{})
}

var userTable *gorm.DB

//UserTable 表明
func UserTable(db *gorm.DB) {
	userTable = db.Table("design.t_user")
}

//QueryUsers 查询所有数据
func QueryUsers() []User {
	var users []User

	userTable.Find(&users)
	return users
}

//QueryUserById 根据用户id查询用户信息
func QueryUserById(id string, user *User) {
	userTable.Where(&User{ID: id}).First(user)
}

func InsertUser(user User) {
	user.ID = tools.UUID()
	user.CreatedTime = time.Now()
	user.DeleteFlag = 0
	user.UpdatedTime = time.Now()
	user.Lock = 0

	userTable.Create(&user)
}

//QueryUserByUsername 根据用户名查询用户
func QueryUserByUsername(username string) (bool, User) {
	var user User

	return userTable.Where(&User{Username: username}).First(&user).RecordNotFound(), user
}
